package com.cy.member;

import java.awt.Point;
import java.util.ArrayList;

import com.cy.controller.MasterController;
import com.cy.member.parent.ChineseChessman;
/**
 * 卒
 * @author CY
 */
public class Zu extends ChineseChessman {

	/**
	 * @param who true红色，false黑色
	 */
	public Zu(boolean who) {
		if(who) {//红车
			this.setBackground("image/红卒.GIF");
		} else {//黑车
			this.setBackground("image/黑卒.gif");
		}
		//生成棋子
		this.generateChessman(who);
	}

	/**
	 * 卒子的移动策略
	 * 先保证走的是直线（site.x == origin.x || site.y == origin.y）
	 * 然后分2中，一种是上方的卒子，一种是下方的卒子。（不用红黑方来分上下，因为以后会变）
	 * 未过河的只能向前走（origin.y <= 4 && site.y-origin.y == 1）
	 * 过了河的还可以左右走 （origin.y > 4 && site.y-origin.y <= 1）
	 */
	@Override
	public boolean move(Point site, ArrayList<Point> points) {
		if(MasterController.gameType) {
			return jingdian(site);
		} else {
			return liuxing(site);
		}
	}

	/**
	 * 经典模式
	 * @param site
	 * @return
	 */
	private boolean jingdian(Point site) {
		//起点坐标
		Point origin = getChessman().getSite();
		//要求走直线
		if(site.x == origin.x || site.y == origin.y) {
			//如果是上面的卒子
			if(!this.getChessman().isWho() && site.y>=origin.y){
				//未过河，只能向前移动一步
				if(origin.y <= 4 && site.y-origin.y == 1){
					getChessman().setSite(site);
					return true;
				} else if(origin.y > 4 && site.y-origin.y <= 1 && Math.abs(origin.x-site.x) <= 1) { //已过河，可左右单步走
					getChessman().setSite(site);
					return true;
				} else {
					return false;
				}
			} else if (this.getChessman().isWho() && site.y<=origin.y) {//如果是下面的卒子
				//未过河，只能向前移动一步
				if(origin.y >= 5 && origin.y-site.y == 1){
					getChessman().setSite(site);
					return true;
				} else if(origin.y < 5 && origin.y-site.y <= 1 && Math.abs(origin.x-site.x) <= 1) {//已过河，可左右单步走
					getChessman().setSite(site);
					return true;
				} else {
					return false;
				}
			}
		}
		return false;
	}
	
	/**
	 * 流行模式
	 * @param site
	 * @return
	 */
	private boolean liuxing(Point site) {
		//起点坐标
		Point origin = getChessman().getSite();
		//要求单步走直线
		if((Math.abs(origin.x - site.x) == 1 && Math.abs(origin.y - site.y) == 0) || (Math.abs(origin.x - site.x) == 0 && Math.abs(origin.y - site.y) == 1)) {
			getChessman().setSite(site);
			return true;
		}
		return false;
	}
}
